import cv2 as cv
import numpy as np  # numpy是一个开源的Python科学计算库


# 电脑摄像头的调取和显示
def video_demo():
    capture = cv.VideoCapture(0)  # 参数为视频设备的id ，如果只有一个摄像头可以填0，表示打开默认的摄像头（这里的参数也可以是视频文件名路径）
    while True:  # 死循环，会循环播放每一帧 ,waitKey(50)表示间隔50ms
        ret, frame = capture.read()
        # read函数读取视频(摄像头)的某帧,它能返回两个参数.第一个参数是bool型的ret，其值为True或False，代表有没有读到图片.第二个参数是frame，是当前截取一帧的图片
        frame = cv.flip(frame, 1)
        # 等于0:沿X轴翻转(垂直翻转)   大于0:沿Y轴翻转(水平翻转)   小于0:先沿X轴翻转，再沿Y轴翻转，等价于旋转180°
        cv.imshow("video", frame)
        c = cv.waitKey(50)
        # 超过50ms, waitKey函数会返回-1，如果10ms内在键盘按了某个按键，则 waitKey函数会返回对应按键的ASCII码值，ASCII码值一定大于0
        if c == 27:
            break


def get_image_info(image):
    print(type(image))  # 表示显示图片类型（即numpy类型的数组）
    print(image.shape)  # 表示图像的尺寸，第一个元素表示矩阵行数，第二个元组表示矩阵列数，第三个元素是3，表示像素值由光的三原色组成
    print(image.size)  # shape三个值的乘积
    print(image.dtype)  # 表示数组元素的类型
    pixel_data = np.array(image)
    print(pixel_data)  # 打印图片矩阵  N维数组对象即矩阵对象


# src = cv.imread("C:/Users/HP_USER/PycharmProjects/image_process/imgs/test001.png")  # 绝对路径
# window 读取文件可以用\，但是在字符串中\是被当作转义字符来使用，因此使用/来代替\
src = cv.imread("imgs/test001.png")  # 相对路径
cv.namedWindow("wangbobo", cv.WINDOW_AUTOSIZE)  # cv.WINDOW_AUTOSIZE表示自动调整窗口大小，不写则为默认
cv.imshow("wangbobo", src)
get_image_info(src)
gray = cv.cvtColor(src, cv.COLOR_BGR2GRAY)   # 使图片颜色变为灰度
cv.imwrite("imgs/test002.png", gray)  # 将灰度图片保存到该项目文件下的imgs文件中去，名字为test002，格式为png
cv.waitKey(0)
video_demo()
cv.destroyAllWindows()
